package com.zhentao.service.impl;

import com.zhentao.user.ChargeUserFeignApi;
import com.zhentao.model.common.dtos.ResponseResult;
import com.zhentao.model.pojo.market.ChargeCoupon;
import com.zhentao.model.pojo.market.ChargeCouponCondition;
import com.zhentao.model.pojo.market.ChargeUserCoupon;
import com.zhentao.service.ChargeCouponService;
import com.zhentao.service.CouponAsyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * @ClassName: couponScheduleServiceImpl
 * @Author: 振涛教育_Q
 * @Date: 2024/12/26 15:01
 */
@Service
@Slf4j
public class CouponAsyncServiceImpl implements CouponAsyncService {
    @Autowired
    private ChargeCouponService chargeCouponService;
    @Autowired
    private ChargeUserFeignApi userFeignApi;

    /**
     * @description  检查优惠卷是否过期  -- 异步方法
     * @author 振涛教育_小Q
     * @date    2024/12/26 15:06
      * @param condition
     * @return java.lang.Integer
     */
    @Override
    @Async
    public void checkCouponExpire(ChargeCoupon coupon, ChargeCouponCondition condition) {
        // 获取优惠卷的有效天数
        Integer period = condition.getPeriod();
        // 1、解析创建时间
        LocalDateTime originalTime = condition.getCreateTime();
        // 2. 使用plusDays方法添加天数
        LocalDateTime newTime = originalTime.plusDays(period);
        // 3. 获取当前时间
        LocalDateTime currentTime = LocalDateTime.now();
        // 4. 比较两个时间
        if (newTime.isAfter(currentTime)) {
            log.info("增加天数后的时间在当前时间之后");
        } else if (newTime.isBefore(currentTime)) {
            log.info("增加天数后的时间在当前时间之前");
            Integer status = 2;
            coupon.setStatus(status);
            chargeCouponService.updateById(coupon);
        } else {
            log.info("增加天数后的时间与当前时间相同");
        }
    }

    /**
     * @description  用户领取优惠卷之后，减少库存，并在此处 判断库存是否已经为 0
     * @author 振涛教育_小Q
     * @date    2024/12/26 15:56
      * @param coupon
     * @return void
     */
    @Override
    public boolean reduceStock(ChargeCoupon coupon,Long userId) {
        log.info("扣减库存开始");
        boolean flag = false;
        // 判断库存是否足够  // 根据id查询
        coupon = chargeCouponService.getById(coupon.getId());
        if(coupon.getTimes() == 0){
            log.info("库存不足");
            return flag;
        }

        // 先扣减积分
        ResponseResult result = userFeignApi.getDeductionCount(coupon.getPoint(),userId);
        if(result.getCode() != 200000){
            return flag;
        }

        flag = chargeCouponService.update()
                .setSql("times = times - 1")
                .setSql("version = version + 1")
                .eq("id", coupon.getId()).update();
        log.info("库存处理完毕，处理优惠卷id为：{}",coupon.getId());
        return flag;
    }

    /**
     * @description  用户领取优惠卷之后，判断优惠卷是否过期
     * @author 振涛教育_小Q
     * @date    2024/12/26 18:19
      * @param couponInfo
     * @param coupon
     * @return void
     */
    @Override
    public Integer checkUserCouponExpire(ChargeCoupon couponInfo, ChargeUserCoupon coupon) {
        // 获取用户领取的时间
        LocalDateTime useTime = coupon.getCreateTime();
        // 获取优惠卷的有效天数
        Integer period = couponInfo.getPeriod();
        // 获取增加天数后的时间
        LocalDateTime plusDays = useTime.plusDays(period);
        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();
        if (plusDays.isAfter(now)) {
            log.info("用户优惠卷：增加天数后的时间在当前时间之后");
        } else if (plusDays.isBefore(now)) {
            log.info("用户优惠卷：增加天数后的时间在当前时间之前");
            return 1;
        } else {
            log.info("用户优惠卷：增加天数后的时间与当前时间相同");
        }
        return coupon.getStatus() == 2 ? 2 : 0;
    }
}
